priv = cellpixbuf->priv;
priv->image_def = gtk_image_definition_new_empty ();
- priv->icon_size = GTK_ICON_SIZE_INHERIT;
}
static void
widget);
_gtk_icon_helper_set_force_scale_pixbuf (icon_helper, TRUE);
_gtk_icon_helper_set_definition (icon_helper, priv->image_def);
- if (gtk_image_definition_get_storage_type (priv->image_def) != GTK_IMAGE_SURFACE)
- _gtk_icon_helper_set_icon_size (icon_helper, priv->icon_size);
}
static void
context = gtk_widget_get_style_context (widget);
gtk_style_context_save (context);
gtk_style_context_add_class (context, GTK_STYLE_CLASS_IMAGE);
+ gtk_icon_size_set_style_classes (gtk_style_context_get_node (context), priv->icon_size);
create_icon_helper (&icon_helper, cellpixbuf, widget);
if (!_gtk_icon_helper_get_is_empty (&icon_helper))
gtk_style_context_save (context);
gtk_style_context_add_class (context, GTK_STYLE_CLASS_IMAGE);
+ gtk_icon_size_set_style_classes (gtk_style_context_get_node (context), priv->icon_size);
g_object_get (cell, "is-expander", &is_expander, NULL);
if (is_expander)
#include "gtkcssenumvalueprivate.h"
#include "gtkcssiconthemevalueprivate.h"
#include "gtkcssnodeprivate.h"
+#include "gtkcssnumbervalueprivate.h"
#include "gtkcssstyleprivate.h"
#include "gtkcssstylepropertyprivate.h"
#include "gtkcsstransientnodeprivate.h"
memset (self, 0, sizeof (GtkIconHelper));
self->def = gtk_image_definition_new_empty ();
- self->icon_size = GTK_ICON_SIZE_INHERIT;
self->pixel_size = -1;
self->texture_is_symbolic = FALSE;
{
width = height = self->pixel_size;
}
- else if (!gtk_icon_size_lookup (self->icon_size, &width, &height))
+ else
{
- if (self->icon_size == GTK_ICON_SIZE_INHERIT)
- {
- width = height = 0;
- }
- else
- {
- g_warning ("Invalid icon size %d", self->icon_size);
- width = height = 24;
- }
+ GtkCssStyle *style = gtk_css_node_get_style (self->node);
+ width = height = _gtk_css_number_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_SIZE), 100);
}
*width_out = width;
width = (gdk_texture_get_width (self->texture) + self->texture_scale - 1) / self->texture_scale;
height = (gdk_texture_get_height (self->texture) + self->texture_scale - 1) / self->texture_scale;
}
- else if (self->icon_size != GTK_ICON_SIZE_INHERIT)
+ else
{
ensure_icon_size (self, &width, &height);
}
gtk_icon_helper_take_definition (self, gtk_image_definition_new_texture (texture));
}
-gboolean
-_gtk_icon_helper_set_icon_size (GtkIconHelper *self,
- GtkIconSize icon_size)
-{
- if (self->icon_size != icon_size)
- {
- self->icon_size = icon_size;
- gtk_icon_helper_invalidate (self);
- return TRUE;
- }
- return FALSE;
-}
-
gboolean
_gtk_icon_helper_set_pixel_size (GtkIconHelper *self,
gint pixel_size)
return self->use_fallback;
}
-GtkIconSize
-_gtk_icon_helper_get_icon_size (GtkIconHelper *self)
-{
- return self->icon_size;
-}
-
gint
_gtk_icon_helper_get_pixel_size (GtkIconHelper *self)
{
gtk_icon_helper_invalidate (self);
}
}
+
+void
+gtk_icon_size_set_style_classes (GtkCssNode *cssnode,
+ GtkIconSize icon_size)
+{
+ struct {
+ GtkIconSize icon_size;
+ const char *class_name;
+ } class_names[] = {
+ { GTK_ICON_SIZE_NORMAL, "normal-icons" },
+ { GTK_ICON_SIZE_LARGE, "large-icons" }
+ };
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS (class_names); i++)
+ {
+ if (icon_size == class_names[i].icon_size)
+ gtk_css_node_add_class (cssnode, g_quark_from_string (class_names[i].class_name));
+ else
+ gtk_css_node_remove_class (cssnode, g_quark_from_string (class_names[i].class_name));
+ }
+}
GtkImageDefinition *def;
- GtkIconSize icon_size;
gint pixel_size;
guint use_fallback : 1;
void _gtk_icon_helper_set_texture (GtkIconHelper *self,
GdkTexture *texture);
-gboolean _gtk_icon_helper_set_icon_size (GtkIconHelper *self,
- GtkIconSize icon_size);
gboolean _gtk_icon_helper_set_pixel_size (GtkIconHelper *self,
gint pixel_size);
gboolean _gtk_icon_helper_set_use_fallback (GtkIconHelper *self,
gboolean use_fallback);
GtkImageType _gtk_icon_helper_get_storage_type (GtkIconHelper *self);
-GtkIconSize _gtk_icon_helper_get_icon_size (GtkIconHelper *self);
gint _gtk_icon_helper_get_pixel_size (GtkIconHelper *self);
gboolean _gtk_icon_helper_get_use_fallback (GtkIconHelper *self);
void gtk_icon_helper_invalidate_for_change (GtkIconHelper *self,
GtkCssStyleChange *change);
+void gtk_icon_size_set_style_classes (GtkCssNode *cssnode,
+ GtkIconSize icon_size);
+
G_END_DECLS
#endif /* __GTK_ICON_HELPER_H__ */
struct _GtkImagePrivate
{
GtkIconHelper icon_helper;
+ GtkIconSize icon_size;
float baseline_align;
};
-#define DEFAULT_ICON_SIZE GTK_ICON_SIZE_INHERIT
static void gtk_image_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot);
static void gtk_image_size_allocate (GtkWidget *widget,
P_("Icon size"),
P_("Symbolic size to use for icon set or named icon"),
0, G_MAXINT,
- DEFAULT_ICON_SIZE,
+ GTK_ICON_SIZE_INHERIT,
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY);
/**
gtk_widget_set_has_window (GTK_WIDGET (image), FALSE);
gtk_icon_helper_init (&priv->icon_helper, widget_node, GTK_WIDGET (image));
- _gtk_icon_helper_set_icon_size (&priv->icon_helper, DEFAULT_ICON_SIZE);
}
static void
g_value_set_string (value, priv->filename);
break;
case PROP_ICON_SIZE:
- g_value_set_int (value, _gtk_icon_helper_get_icon_size (&priv->icon_helper));
+ g_value_set_int (value, priv->icon_size);
break;
case PROP_PIXEL_SIZE:
g_value_set_int (value, _gtk_icon_helper_get_pixel_size (&priv->icon_helper));
g_return_if_fail (GTK_IS_IMAGE (image));
- if (_gtk_icon_helper_set_icon_size (&priv->icon_helper, icon_size))
- {
- gtk_widget_queue_resize (GTK_WIDGET (image));
- g_object_notify_by_pspec (G_OBJECT (image), image_props[PROP_ICON_SIZE]);
- }
+ if (priv->icon_size == icon_size)
+ return;
+
+ priv->icon_size = icon_size;
+ gtk_icon_size_set_style_classes (gtk_widget_get_css_node (GTK_WIDGET (image)), icon_size);
+ g_object_notify_by_pspec (G_OBJECT (image), image_props[PROP_ICON_SIZE]);
}
/**
g_return_val_if_fail (GTK_IS_IMAGE (image), GTK_ICON_SIZE_INHERIT);
- return _gtk_icon_helper_get_icon_size (&priv->icon_helper);
+ return priv->icon_size;
}
}
}
+.normal-icons {
+ -gtk-icon-size: 16px;
+}
+
+.large-icons {
+ -gtk-icon-size: 32px;
+}
+
/*
These wildcard seems unavoidable, need to investigate.
Wildcards are bad and troublesome, use them with care,
}
}
+.normal-icons {
+ -gtk-icon-size: 16px;
+}
+
+.large-icons {
+ -gtk-icon-size: 32px;
+}
+
.view {
color: $fg_color;
background-color: $base_color;